package br.com.mtech.ctrlliberty.web.mb;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

import br.com.mtech.ctrlliberty.clientjar.ejb.PesquisaEJBRemote;
import br.com.mtech.ctrlliberty.clientjar.entity.CamposPesquisaVO;
import br.com.mtech.ctrlliberty.clientjar.entity.MensagemVO;
import br.com.mtech.ctrlliberty.clientjar.entity.TelefoneVO;
import br.com.mtech.ctrlliberty.clientjar.entity.UsuarioVO;
import br.com.mtech.ctrlliberty.clientjar.exception.BusinessException;
import br.com.mtech.ctrlliberty.web.util.ManagedBeanUtil;
import br.com.mtech.ctrlliberty.web.util.UtilsNLS;

@ManagedBean(name="pesquisaMensagem")
@ViewScoped
public class PesquisaMensagemBean implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 8321267604425977449L;
	
	@EJB
	private PesquisaEJBRemote pesquisaEJB;
	
	private Long idTelefone;
	private CamposPesquisaVO campos;
	private List<TelefoneVO> listaTelefone;
	private List<MensagemVO> listaMensagem;
	private MensagemVO mensagem;
	private MapModel mapa;
	
	@PostConstruct
	public void inicializarPagina() {
		
		campos = new CamposPesquisaVO();
		
		try {
			UsuarioVO usuarioLogado = ManagedBeanUtil.recuperarUsuarioLogado();
				
			if(usuarioLogado == null) {
				UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
					return;
			} else {
				listaTelefone = pesquisaEJB.listarTelefonesPorUsuario(usuarioLogado);				
			} 
			
		} catch (BusinessException e) {
			UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
		}
		
	}
	
	public void pesquisarMensagens() {
		TelefoneVO telSelecionado = null;
		for (TelefoneVO tel : listaTelefone) {
			if(this.getIdTelefone().equals(tel.getId())){
				telSelecionado = tel;
				break;
			}
		}
		
		listaMensagem = null;
		
		try {
			listaMensagem = pesquisaEJB.pesquisarMensagens(telSelecionado, campos);
		} catch (BusinessException e) {
			UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
		}	
	}
	
	public void mostrarCoordenadaGPS() {		
		LatLng coordenada = new LatLng(mensagem.getCoordenada().getLatitude(), mensagem.getCoordenada().getLongitude());
		mapa = new DefaultMapModel(); 
		mapa.addOverlay(new Marker(coordenada, mensagem.getNumeroRemotoFormatado()));
		
	}

	public Long getIdTelefone() {
		return idTelefone;
	}

	public void setIdTelefone(Long idTelefone) {
		this.idTelefone = idTelefone;
	}

	public CamposPesquisaVO getCampos() {
		return campos;
	}

	public void setCampos(CamposPesquisaVO campos) {
		this.campos = campos;
	}

	public List<TelefoneVO> getListaTelefone() {
		return listaTelefone;
	}

	public void setListaTelefone(List<TelefoneVO> listaTelefone) {
		this.listaTelefone = listaTelefone;
	}

	public List<MensagemVO> getListaMensagem() {
		return listaMensagem;
	}

	public void setListaMensagem(List<MensagemVO> listaMensagem) {
		this.listaMensagem = listaMensagem;
	}

	/**
	 * @return the mensagem
	 */
	public MensagemVO getMensagem() {
		return mensagem;
	}

	/**
	 * @param mensagem the mensagem to set
	 */
	public void setMensagem(MensagemVO mensagem) {
		this.mensagem = mensagem;
	}

	/**
	 * @return the mapa
	 */
	public MapModel getMapa() {
		return mapa;
	}

	/**
	 * @param mapa the mapa to set
	 */
	public void setMapa(MapModel mapa) {
		this.mapa = mapa;
	}


}
